/** 
 *! \file   alloc_event_t.h
 *  \brief  Structures de données pour stocker les evenements d'allocation
 */

#ifndef ALLOC_EVENT_T_H
#define	ALLOC_EVENT_T_H

/**
 * \brief Structure de données stockant une evenement d'allocation
 */

/* \fin
 * ret=malloc(size);                         type='m'
 * ret=calloc(nmemb,size);                   type='c'
 * ret=realloc(addr_realloc,size);           type='r'
 * free(ret);                                type='f'
 **/

typedef struct{
    /**
     * \brief type de l'evenemnt (malloc,calloc,realloc,free)
     */
    char type;                //1 octet
    /**
     * \brief adresse mémoire retournée par l'evenement
     */
    void* ret;                //8 octets
    
    /**
     * \brief adresse mémoire réallouée par l'evenement si c'est un realloc
     */
    void* addr_realloc;       //8 octets
    
    /**
     * \brief taille de l'allocation mémoire 
     */
    size_t size;              //8 octets
    
    /**
     * \brief nombre de blocs mémoire demandés, valable si c'est un calloc
     */
    size_t nmemb;             //8 octets
} alloc_event_t;

#define EVENT_SIZE sizeof(alloc_event_t)


/*-----------------------------*/
//les id dans les dictionnaires
/*----------------------------*/
#define id_malloc  0
#define id_calloc  1
#define id_realloc 2
#define id_free    3
/*------------------*/

/*--------------------------------*/
//le nombre d'elements de chaque trace
/*--------------------------------*/
#define MAX_ELEMENTS  500
/*--------------------------------*/


/**
 * \brief permet de mapper chaque variable d'environnement 
 */
enum enum_keys
{
    IPC_KEY_1=0,
    IPC_KEY_2=1,
    IPC_KEY_3=2,
};

/**
 * \brief Les variables d'environnements qui doivent être fixées.
 */
static const char* ipc_keys[3]={".","../","../../"};


#endif	/* ALLOC_EVENT_T_H */

